<?php

class DeshabilitarUsuarioAdministradorValidator extends sfValidatorBase
{
	
	protected function configure($options = array(), $messages = array()) {
		$this->addOption('nombre');
		$this->addOption('habilitado');
		$this->addOption('rol');
		$this->addOption('club_id');
	}	
	
	protected function doClean($value)
	{
		$nombre = $value[$this->getOption('nombre')];
		$habilitado = $value[$this->getOption('habilitado')];
		$rol = $value[$this->getOption('rol')];
		$club = $value[$this->getOption('club_id')];
		
		$usuario = UsuarioTable::getInstance()->findByNombre($nombre);
		if ($usuario != null){	//existia
			//chequeo que el usuario fuera un admin valido (o sea, es el que esta contabilizado)
			$usuarioEraAdmin = $usuario->isAdmin() && $usuario->getHabilitado();
		}else{
			$usuarioEraAdmin = false;
		}
		$quedaUnSoloAdmin = (UsuarioTable::getInstance()->findAdministradoresHabilitados()->count() == 1);
		$vaADejarDeSerAdministrador = ($habilitado == 0) || ($rol != Usuario::Rol_Administrador) || ($club > 0);
		
		if ($vaADejarDeSerAdministrador && $usuarioEraAdmin && $quedaUnSoloAdmin) {
			$this->messages = array('invalid' => 'No se puede deshabilitar el unico administrador que queda en el sistema'); 
			throw new sfValidatorError($this, 'invalid', array('value' => $value));
		}
		return $value;
	}

}
